<?php
namespace app\admin\controller;
use think\Controller;
use think\Db;
use think\Request;
use think\Cache;
use app\admin\model\Menu as MenuModel;
use app\admin\model\Role as RoleModel;
// use app\admin\model\Config as ConfigModel;
/**
 * 后台基础控制器
 * @author 唐小虎 <1731050423@qq.com>
 */
class Base extends Controller {
    public $meta_title = '';
	/**
     * 后台控制器初始化
     */
    protected function _initialize(){
    	// 获取当前用户ID
        if(defined('UID')) return ;
        define('UID',is_login());
        if( !UID ){// 还没登录 跳转到登录页面
            $this->redirect('/admin/Account/login');
        }
        
        /* 读取数据库中的配置 */
        // $config =   cache('SYSTEM_CONFIG');
        // if(!$config){
        //     $config =   ConfigModel::lists();
        //     cache('SYSTEM_CONFIG',$config,$config);
        // }
        // config('SYSTEM_CONFIG',$config); //添加配置
        // Cache::clear(); 
        // 是否是超级管理员
        define('IS_ROOT',   is_administrator());
        // if(!IS_ROOT && C('ADMIN_ALLOW_IP')){
        //     // 检查IP地址访问
        //     if(!in_array(get_client_ip(),explode(',',C('ADMIN_ALLOW_IP')))){
        //         $this->error('403:禁止访问');
        //     }
        // }
        // 检测系统权限
        // if(!IS_ROOT){
        //     $access =   $this->accessControl();
        //     if ( false === $access ) {
        //         $this->error('403:禁止访问');
        //     }elseif(null === $access ){
        //         //检测访问权限
        //         $rule  = strtolower(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME);
        //         if ( !$this->checkRule($rule,array('in','1,2')) ){
        //             $this->error('未授权访问!');
        //         }else{
        //             // 检测分类及内容有关的各项动态权限
        //             $dynamic    =   $this->checkDynamic();
        //             if( false === $dynamic ){
        //                 $this->error('未授权访问!');
        //             }
        //         }
        //     }
        // }      
        // 如果不是ajax请求，则读取菜单
        if (!request()->isAjax()) {
            // 获取侧边栏菜单
            $this->assign('_sidebar_menus', MenuModel::getSidebarMenu());
            // 获取面包屑导航
            $this->assign('_location', MenuModel::getLocation('', true));
            // 检查权限
            if (!RoleModel::checkAuth()) return $this->error('你没有访问权限！');
            
        }
        //检查权限
        // if (!RoleModel::checkAuth()) return $this->error('权限不足！');
        
    }

    /**
     * 删除
     * @author 小虎  2017/4/24
     * @return mixed
     */
    public function delete($record = [])
    {
        return $this->setStatus('delete', $record);
    }
    /**
     * 设置状态
     * 禁用、启用、删除都是调用这个内部方法
     * @param string $type 操作类型：enable,disable,delete
     * @param array $record 行为日志内容
     * @author 小虎  2017/4/24
     * @return mixed
     */
    public function setStatus($type = '', $record = [])
    {
        $ids   = $this->request->isPost() ? input('post.ids') : input('param.ids');
        $table = input('param.table');
        $field = input('param.field', 'status');

        if (empty($ids)) return $this->error('缺少主键');
        if (empty($table)) return $this->error('缺少表名');

        // 验证是否操作管理员
        if ($table == 'admin' || $table == 'role' || $table == 'menu') {
            if (is_array($ids) && in_array('1', $ids)) {
                // 去掉值为1的数据，比如超级管理员，系统核心模块
                return $this->error('禁止操作');
            } else if($ids === '1') {
                return $this->error('禁止操作');
            }
        }

        $pk = Db::name($table)->getPk(); // 主键名称
        $map[$pk] = ['in', $ids];

        switch ($type) {
            case 'disable': // 禁用
                $result = Db::name($table)->where($map)->setField($field, 0);
                break;
            case 'enable': // 启用
                $result = Db::name($table)->where($map)->setField($field, 1);
                break;
            case 'delete': // 删除
                $result = Db::name($table)->where($map)->delete();
                break;
            default:
                return $this->error('非法操作');
                break;
        }

        if (false !== $result) {
            Cache::clear();
            // 记录行为日志
            if (!empty($record)) {
                call_user_func_array('action_log', $record);
            }
            return $this->success('操作成功');
        } else {
            return $this->error('操作失败');
        }
    }

}
